home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
ByteArray.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-27
|
2KB
|
97 lines
#ifdef __GNUG__
#pragma implementation
#endif
#include "ByteArray.h"
#include "Class.h"
#include "String.h"
char *cAtPutName= "AtPut";
//---- ByteArray ---------------------------------------------------------------
NewMetaImpl(ByteArray,Object, (TV(cont,cap), T(cap)));
void ByteArray::AllocByteArray(byte *aStr, int l)
{
if (aStr && (l != 0)) {
if (l < 0)
l= strlen((char*)aStr)+1;
cont= new byte[cap= l];
memcpy(cont, aStr, l);
} else
cont= new byte[cap= 10];
}
ByteArray::ByteArray(byte *aStr, int l)
{
AllocByteArray(aStr, l);
}
ByteArray::ByteArray(char *aStr, int l)
{
AllocByteArray((byte*) aStr, l);
}
ByteArray::ByteArray(int size)
{
if (size <= 0)
size= 10;
cont= new byte[cap= size];
}
ByteArray::~ByteArray()
{
SafeDelete(cont);
}
void ByteArray::operator= (byte *s)
{
strreplace((char**)&cont, (char*)s);
cap= strlen((char*)s)+1;
}
unsigned long ByteArray::Hash() // Aho, Sethi, Ullman
{
return strhash(cont);
}
bool ByteArray::IsEqual(Object *b)
{
return b->IsKindOf(ByteArray)
&& strcmp((char*)cont, (char*)((ByteArray*)b)->cont) == 0;
}
int ByteArray::Compare(Object *b)
{
return strcmp((char*)cont, (char*)Guard(b, ByteArray)->cont);
}
void ByteArray::SetString(byte *s)
{
SafeDelete(cont);
cap= strlen((char*)s)+1;
cont= new byte[cap];
memcpy(cont, s, cap);
}
OStream& ByteArray::PrintOn(OStream &s)
{
Object::PrintOn(s);
return s.PrintString(cont, cap);
}
IStream& ByteArray::ReadFrom(IStream& s)
{
Object::ReadFrom(s);
SafeDelete(cont);
return s.ReadString(&cont, &cap);
}
void ByteArray::InspectorId(char *buf, int sz)
{
strn0cpy(buf, (char*)Str(), sz);
}